package com.lonely.goods.enums;

import com.lonely.common.exception.BusinessException;
import lombok.Getter;

/**
 * @author : 黄志标
 * @date: 2025/7/1 15:05
 * @description: 商品相关枚举
 */
public class GoodsEnum {


    /**
     * 商品状态枚举
     */
    @Getter
    public enum GoodsStatusEnum {

        /**
         * 新建款维护信息
         */
        NEW_MAINTENANCE_INFORMATION(1, "新建款维护信息"),

        /**
         * 待打纸样
         */
        THE_PAPER_PATTERN_IS_YET_TO_BE_MADE(2, "待打纸样"),

        /**
         * 今日计划打
         */
        TODAY_PLAN_IS_TO_PLAY(3, "今日计划打"),

        /**
         * 纸样完成
         */
        THE_PATTERN_IS_COMPLETED(4, "纸样完成"),

        /**
         * 采购中
         */
        IN_PROCUREMENT(5, "采购中"),

        /**
         * 采购完成
         */
        PROCUREMENT_COMPLETED(6, "采购完成"),

        /**
         * 待裁中
         */
        PENDING_LAYOFFS(7, "待裁中"),

        /**
         * 裁版完成
         */
        THE_PATTERN_CUTTING_IS_COMPLETED(8, "裁版完成"),

        /**
         * 待发印绣花
         */
        TO_BE_PRINTED_AND_EMBROIDERED(9, "待发印绣花"),

        /**
         * 印绣花中
         */
        IN_EMBROIDERY_AND_PRINTING(10, "印绣花中"),

        /**
         * 今日回版
         */
        TODAY_RETURN(11, "今日回版"),

        /**
         * 待车缝
         */
        WAITING_FOR_SEWING(12, "待车缝"),

        /**
         * 车缝完成
         */
        THE_SEWING_IS_COMPLETED(13, "车缝完成"),

        /**
         * 样版完成
         */
        THE_SAMPLE_IS_COMPLETED(14, "已完成打版"),

        /**
         * 审版中
         */
        UNDER_REVIEW(15, "审版中"),

        /**
         * 确认价格
         */
        CONFIRM_THE_PRICE(16, "确认价格"),

        /**
         * 已下单
         */
        ORDER_PLACED(17, "已下单"),


        ;


        /**
         * 状态
         */
        private final Integer status;

        /**
         * 状态描述
         */
        private final String desc;

        GoodsStatusEnum(Integer status, String desc) {
            this.status = status;
            this.desc = desc;
        }

        /**
         * 根据状态获取枚举
         *
         * @param status
         * @return
         */
        public static GoodsStatusEnum getByStatus(Integer status) {
            for (GoodsStatusEnum value : values()) {
                if (value.getStatus().equals(status)) {
                    return value;
                }
            }
            throw new BusinessException("商品状态不存在");
        }


    }

    /**
     * 商品文件类型枚举
     */
    @Getter
    public enum GoodsFileTypeEnum {

        /**
         * 样衣前
         */
        PATTERN_MAKING_BEFORE(1),

        /**
         * 样衣后
         */
        PATTERN_MAKING_AFTER(2),

        /**
         * 纸型
         */
        PAPER_PATTERN(3);


        /**
         * 文件类型
         */
        private final Integer type;

        GoodsFileTypeEnum(Integer type) {
            this.type = type;
        }
    }


    /**
     * 商品二次工艺类型枚举
     */
    @Getter
    public enum GoodsSecondProcessTypeEnum {

        /**
         * 面辅料的二次工艺
         */
        DOUGH_AND_AUXILIARY_MATERIALS(1),

        /**
         * 成衣二次工艺
         */
        READY_TO_WEAR(2);


        /**
         * 二次工艺类型
         */
        private final Integer type;

        GoodsSecondProcessTypeEnum(Integer type) {
            this.type = type;
        }
    }


    /**
     * 商品成本统计行类型枚举
     */
    @Getter
    public enum GoodsTotalCostTypeEnum {

        /**
         * 部件价格
         */
        PART("1"),

        /**
         * 总价
         */
        TOTAL_COST("2");


        /**
         * 二次工艺类型
         */
        private final String type;

        GoodsTotalCostTypeEnum(String type) {
            this.type = type;
        }
    }


    /**
     * 商品部件类型枚举
     */
    @Getter
    public enum GoodsPartTypeEnum {

        /**
         * 非套装
         */
        NO_SUIT(1),

        /**
         * 套装
         */
        SUIT(2);


        /**
         * 二次工艺类型
         */
        private final int type;

        GoodsPartTypeEnum(int type) {
            this.type = type;
        }
    }

    /**
     * 商品日志操作类型枚举
     */
    @Getter
    public enum GoodsLogOperatorTypeEnum {

        /**
         * 修改状态
         */
        CHANGE_STATUS("修改状态"),

        ;

        /**
         * 操作类型
         */
        private final String operator;

        GoodsLogOperatorTypeEnum(String operator) {
            this.operator = operator;
        }
    }

    /**
     * 商品审核版本枚举
     */
    @Getter
    public enum GoodsReviewVersionEnum {

        /**
         * 一版
         */
        V1("V1"),

        /**
         * 二版
         */
        V2("V2"),

        /**
         * 三版
         */
        V3("V3");

        private final String version;

        GoodsReviewVersionEnum(String version) {
            this.version = version;
        }
    }

    /**
     * 商品审核结果枚举
     */
    @Getter
    public enum GoodsReviewResultEnum {

        /**
         * 通过
         */
        THROUGH("1"),

        /**
         * 未通过
         */
        FAILED("0");

        private final String result;

        GoodsReviewResultEnum(String result) {
            this.result = result;
        }
    }
}
